#include "wxssinglechoicedialog.h"
#include "../wxsitemresdata.h"
#include <wx/choicdlg.h>

namespace {
  wxsRegisterItem<wxsSingleChoiceDialog> Reg( _T( "SingleChoiceDialog" ), _T( "单选对话框" ), wxsTTool, _T( "对话框" ), 70, false );
  WXS_ST_BEGIN( wxsSingleChoiceDialogStyles, _T( "wxCHOICEDLG_STYLE" ) )
  WXS_ST_CATEGORY( "wxSingleChoiceDialog" )
  WXS_ST( wxCHOICEDLG_STYLE )
  WXS_ST( wxOK )
  WXS_ST( wxCANCEL )
  WXS_ST( wxCENTRE )
  WXS_ST_DEFAULTS()
  WXS_ST_END()
}

wxsSingleChoiceDialog::wxsSingleChoiceDialog( wxsItemResData* Data ):
  wxsTool( Data, &Reg.Info, 0, wxsSingleChoiceDialogStyles ) {
  m_Message = _T( "Select items" );
}

void wxsSingleChoiceDialog::OnBuildCreatingCode() {
  switch( GetLanguage() ) {
    case wxsCPP: {
      AddHeader( _T( "<wx/choicdlg.h>" ), GetInfo().ClassName, hfInPCH );
      wxString ChoicesName;
      if( m_Content.GetCount() > 0 ) {
        ChoicesName = GetCoderContext()->GetUniqueName( _T( "__wxSingleChoiceDialogChoices" ) );
        Codef( _T( "wxString %s[%d] = \n{\n" ), ChoicesName.wx_str(), ( int )m_Content.GetCount() );
        for( size_t i = 0; i < m_Content.GetCount(); ++i ) {
          Codef( _T( "\t%t%s\n" ), m_Content[i].wx_str(), ( ( i != m_Content.GetCount() - 1 ) ? _T( "," ) : _T( "" ) ) );
        }
        Codef( _T( "};\n" ) );
      }
      Codef( _T( "%C(%W, %t, %t, %d, %s, 0, %T, %P);\n" ),
             m_Message.wx_str(),
             m_Caption.wx_str(),
             ( int )m_Content.GetCount(),
             ( m_Content.IsEmpty() ? _T( "0" ) : ChoicesName.wx_str() ) );
      BuildSetupWindowCode();
      return;
    }
    case wxsUnknownLanguage:
    default: {
      wxsCodeMarks::Unknown( _T( "wxsSingleChoiceDialog::OnBuildCreatingCode" ), GetLanguage() );
    }
  }
}

void wxsSingleChoiceDialog::OnEnumToolProperties( M_Code_unused long Flags ) {
  WXS_SHORT_STRING( wxsSingleChoiceDialog, m_Message, _T( "Message" ), _T( "message" ), _T( "" ), false );
  WXS_SHORT_STRING( wxsSingleChoiceDialog, m_Caption, _T( "Caption" ), _T( "caption" ), _T( "" ), false );
  WXS_ARRAYSTRING( wxsSingleChoiceDialog, m_Content, _T( "Items" ),  _T( "content" ), _T( "item" ) );
}
